#pragma once

#include <cstdint>
#include <string>


// 抽象Metrics 收集器接口
class MetricsCollector {
public:
    virtual ~MetricsCollector() = default;
    // 日志总数
    virtual void inc_total_logs() = 0;
    // 丢弃日志数
    virtual void inc_dropped_logs() = 0;
    // Sink写入错误数 (按Sink名称分类)
    virtual void inc_sink_errors(const std::string& sink_name) = 0;
    // 队列大小 (按队列名称分类)
    virtual void set_queue_size(const std::string& queue_name, size_t size) = 0;

};


// 默认空实现(禁用Metrics时使用)
class NullMetricsCollector : public MetricsCollector {
public:
    void inc_total_logs() override {}
    void inc_dropped_logs() override {}
    void inc_sink_errors(const std::string&) override {}
    void set_queue_size(const std::string& queue_name, size_t size) override {} 
};


// 全局默认Metrics收集器(可通过set_global_collector替换)
extern MetricsCollector* g_metrics_collector;
inline MetricsCollector* get_metrics_collector() {
   return g_metrics_collector ? g_metrics_collector : new NullMetricsCollector();
}
